package com.solo.system.mapper;

import com.mybatisflex.core.query.QueryChain;
import com.solo.common.core.base.mapper.BasicMapper;
import com.solo.system.api.entity.SysRole;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

import static com.solo.system.api.entity.table.SysRoleTableDef.SysRoleTable;
import static com.solo.system.api.entity.table.SysUserRoleTableDef.SysUserRoleTable;

/**
 * 系统角色Mapper接口
 * @author 十一
 * @since 2023/09/22 17:27
 * 人生若只如初见，何事秋风悲画扇
 **/
@Mapper
public interface SysRoleMapper extends BasicMapper<SysRole> {

    /**
     * 按名称查询角色信息
     * @param name 名称
     * @return {@link SysRole }
     */
    default SysRole selectByName(String name) {
        return QueryChain.of(this)
                .where(SysRoleTable.Name.eq(name))
                .one();
    }

    /**
     * 按代码查询角色信息
     * @param code 代码
     * @return {@link SysRole }
     */
    default SysRole selectByCode(String code) {
        return QueryChain.of(this)
                .where(SysRoleTable.Code.eq(code))
                .one();
    }

    /**
     * 按用户id查询角色列表
     * @param userId 用户id
     * @return {@link List }<{@link SysRole }>
     */
    default List<SysRole> selectRoles(Long userId) {
        return QueryChain.of(this)
                .select(SysRoleTable.AllColumns)
                .from(SysRoleTable)
                .leftJoin(SysUserRoleTable)
                .on(SysRoleTable.RoleId.eq(SysUserRoleTable.RoleId))
                .where(SysUserRoleTable.UserId.eq(userId))
                .list();
    }

}
